Przykad A.7. Kod pomiaru czasu w jzyku Scheme
;; Tu wanie wykonuje si testowan funkcj na rozmiarze problemu
;; result: (number -> any) -> number
;; Oblicza czas dziaania f na danym probSize
(define (result f probSize)
   (let* ((start-time (current-inexact-miliseconds))
          (result (f probSize))
          (end-time (current-inexact-miliseconds)))
      (- end-time start-time)))

;; trials: (number -> any) number number -> (listof number)
;; Buduj list wynikw prb
(define (trials f numTrials probSize)
   (if (= numTrials 1)
       (list (result f probSize))
       (cons (result f probSize)
             (trials f (- numTrials 1) probSize))))

;; Generuj wiersz tabeli raportu dotyczcego rozmiaru problemu
(define (smallReport f numTrials probSize)
   (let* ((results (trials f numTrials probSize))
           (reduced (remove-number
                     (remove-number results (find-min results))
                     (find-max results))))
      (display (list 'probSize: probSize
                    'numTrials: numTrials
                    (average reduced)))
      (newline)))

;; Generuj cay raport dotyczcy danej funkcji, zwikszajc o jeden
;; rozmiar problemu
(define (briefReport f inc numTrials minProbSize maxProbSize)
   (if (>= minProbSize maxProbSize)
      (smallReport f numTrials minProbSize)
      (begin
         (smallReport f numTrials minProbSize)
         (briefReport f inc numTrials (inc minProbSize) maxProbSize))))

;; Standardowe funkcje podwajania i dodawania 1 do postpu w raportowaniu
(define (double n) (* 2 n))
(define (plus1 n) (+ 1 n))
